package clinsistem.c.repositorio;

import java.sql.*;
import java.util.Hashtable;
import java.util.LinkedList;

import clinsistem.b.negocio.entidades.*;

public class RepositorioFuncionalidade {
	
	public Hashtable<Integer,String> listaAdministrador() throws Exception {
		Statement stmt = null;
		ResultSet rs = null;		
		Hashtable<Integer,String> lista = new Hashtable<Integer,String>();
		
		stmt = ConexaoBD.getInstance().createStatement();
		rs = stmt.executeQuery("SELECT funcionalidade FROM perfil_funcionalidade WHERE perfil ='ADMINISTRADOR';");
		
		while (rs.next()) {
			lista.put(rs.getInt("funcionalidade"), "");
		}
		
		return lista;
	}
	
	public Hashtable<Integer,String> listaFuncionario() throws Exception {
		Statement stmt = null;
		ResultSet rs = null;		
		Hashtable<Integer,String> lista = new Hashtable<Integer,String>();
		
		stmt = ConexaoBD.getInstance().createStatement();
		rs = stmt.executeQuery("SELECT funcionalidade FROM perfil_funcionalidade WHERE perfil ='FUNCIONARIO';");
		
		while (rs.next()) {
			lista.put(rs.getInt("funcionalidade"), "");
		}
		
		return lista;
	}
	
	public Hashtable<Integer,String> listaProfissional() throws Exception {
		Statement stmt = null;
		ResultSet rs = null;		
		Hashtable<Integer,String> lista = new Hashtable<Integer,String>();
		
		stmt = ConexaoBD.getInstance().createStatement();
		rs = stmt.executeQuery("SELECT funcionalidade FROM perfil_funcionalidade WHERE perfil ='PROFISSIONAL';");
		
		while (rs.next()) {
			lista.put(rs.getInt("funcionalidade"), "");
		}
		
		return lista;
	}
	
	public boolean temPermissao(Usuario user,int funcionalidade) throws Exception {
		Statement stmt = null;
		ResultSet rs = null;		
		
		stmt = ConexaoBD.getInstance().createStatement();
		rs = stmt.executeQuery("SELECT * FROM perfil_funcionalidade WHERE perfil ='"+user.getTipo()+"' AND funcionalidade = "+funcionalidade+";");
		
		return rs.next();
		
	}
	
	public void atribuitFuncionalidades(LinkedList<Integer> adm, LinkedList<Integer> profissional, LinkedList<Integer> funcionario) throws Exception {
		Statement stmt = null;
		
		stmt = ConexaoBD.getInstance().createStatement();
		
		stmt.execute("BEGIN;");
		stmt.execute("DELETE FROM perfil_funcionalidade;");
		
		stmt.execute("INSERT INTO perfil_funcionalidade(perfil,funcionalidade) VALUES ('ADMINISTRADOR', 20);");
		
		for (int i = 0; i < adm.size(); i++) {
			stmt.execute("INSERT INTO perfil_funcionalidade(perfil,funcionalidade) VALUES ('ADMINISTRADOR', "+adm.get(i)+");");
		}
		
		for (int i = 0; i < profissional.size(); i++) {
			stmt.execute("INSERT INTO perfil_funcionalidade(perfil,funcionalidade) VALUES ('PROFISSIONAL', "+profissional.get(i)+");");
		}
		
		for (int i = 0; i < funcionario.size(); i++) {
			stmt.execute("INSERT INTO perfil_funcionalidade(perfil,funcionalidade) VALUES ('FUNCIONARIO', "+funcionario.get(i)+");");
		}
		
		stmt.execute("COMMIT;");
		
		
	}
}
